/*
 * Trigrama.hpp
 *
 *  Created on: 27/11/2014
 *      Author: nico
 */

#ifndef TRUNK_TP_DATOS_SRC_TRIGRAMA_HPP_
#define TRUNK_TP_DATOS_SRC_TRIGRAMA_HPP_

#include <string>
#include <map>
#include "Bigrama.hpp"

using namespace std;

class Trigrama {

private:
	friend class boost::serialization::access;
			template <class Archive>
			friend void serialize (Archive &ar, Trigrama& trigrama, const unsigned int version){
				ar & trigrama.clave;
				ar & trigrama.terminos;
			}
	string clave;
	map <string,Unigrama*> terminos;

public:
	Trigrama ();
	Trigrama (string clave);
	Trigrama (const Trigrama& trigrama); // constructor de copia
	~Trigrama();

	string getClave();
	bool existeTermino (string termino);
	void agregarTermino (string termino);
	void agregarTermino (Unigrama* unigrama);
	void incOcurrencias (string* termino);
	Ocurrencias getOcurrencias (string termino);
	void sumarOcurrencias (string termino, Ocurrencias ocurrencias);
	Ocurrencias getSumatoriaTrigramas ();
	int getCantTerminosDistintos();
	Probabilidad getProbabilidad (string* termino);
	map <string,Unigrama*>:: iterator getIteradorTerminos();
	map <string,Unigrama*>:: iterator ultimoTermino ();
	friend bool operator< (const Trigrama& u1, const Trigrama& u2);

	//TODO int getHash (string* termino);

};

#endif /* TRUNK_TP_DATOS_SRC_TRIGRAMA_HPP_ */
